Warning: Undefined array key "HTTP_ACCEPT_LANGUAGE" in /var/www/vhosts/bilgigunlugum.net/httpdocs/index.php on line 43
PHP Programlama

BG MVC Model View Controller eğitim serisi yayında...

Ana sayfa > Programlama > PHP > PHP form

PHP form

HTML formları aracılığı ile, kullanıcılar bilgisayarlarındaki tarayıcıda açtıkları bir web sayfası üzerinden yaptıkları veri girişlerini bir sunucuya gönderebilirler. Farklı bir ifade ile; web sayfasında yapılan işlemler kullanıcı tarafından girilen verileri esas alır. Örneğin, e-posta göndermek gibi.

Bir HTML form üzerinde kullanıcının veri girişi yapabilmesi için gerekli olan text, checkbox, radio, textarea, select, file gibi veri giriş alanları ile formu göndermeye yarayan submit butonu yer alır.

Form veri giriş alanları <form> ve </form> etiketleri arasında yer alır.

HTML formları aracılığı ile bir bilgi gönderebilmek ve işlem yapabilmek için, bu formun içinde yer aldığı bir dosya ile gönderilen formda yer alan bilgilere işlem yapacak bir dosya gerekir.

Aşağıdaki örnekte, form.php adlı dosyada, bir form içinde bir metin veri giriş alanı ile bir submit butonu bulunmaktadır.

form.php


<html>
<body>

<form method="post" action="formislem.php">
  Adı: <input type="text" id="adi" name="adi">
  <input type="submit" value="Gönder">
</form>

</body>
</html>

method : Formdaki verilerin kullanma yöntemi (post veya get)

action : Formdaki verilerin gönderileceği dosya

type : Veri giriş alanının türünü belirler.

name : Veri giriş alanının adı (Mutlaka tanımlanmalıdır, çünkü $_POST dizini içindeki değişken adını oluşturur.)

Yukarıdaki dosyayı çalıştırdığımızda, web tarayıcımızda aşağıdaki ifadeler karşımıza çıkar:

Adı:

Veri giriş alanına "Ahmet" yazıp butona tıkladığınızda, form içindeki veriler post yöntemi ile formislem.php dosyası otomatik olarak açılır ve bilgiler dosyaya gönderilir.

formislem.php (Aktarılan dosya)


<html>
<body>

<?php
   echo 'Adı: ' . htmlspecialchars($_POST['adi']);
?>

</body>
</html>

Yukarıdaki form.php dosyasında veri giriş alanına "Ahmet" değerini girip submit butonuna bastığınızda, formislem.php dosyası çağrılır ve web tarayıcınızda aşağıdaki ifadeler karşınıza çıkar:

Adı: Ahmet

formislem.php dosyasında kullanılan htmlspecialchars() fonksiyonu HTML'de kullanılan özel karakterleri uygun bir şekilde çevirerek, HTML etiketleri veya Javascript yoluyla PHP sayfasına yapılabilecek muhtemel güvenlik saldırılarını önler.

Dosya içindeki $_POST['adi'] değişken değeri PHP tarafından otomatik olarak atanır. Aynı değişken değerine $_REQUEST['adi'] yoluyla da erişmek mümkündür.

Form işlemlerinde tek dosya kullanma

Eğer, aynı dosyada hem form bilgilerini koymak hem de form bilgilerine işlem yapmak istersek, çalışmakta olan PHP dosyasının yol tanımlamasını veren $_SERVER['PHP_SELF'] değişkenini kullanabiliriz.

form.php


<html>
<body>

<?php
   if (!empty($_POST['adi'])) {
       echo 'Adı: ' . htmlspecialchars($_POST['adi']);
   }	   
   else {
      echo '<form method="post" action="' . htmlspecialchars($_SERVER["PHP_SELF"]) . '">
      Adı: <input type="text" id="adi" name="adi">
      <input type="submit" value="Gönder">
      </form>';
   }  
?>

</body>
</html>

Veri giriş alanına "Ahmet" yazıp butona tıkladığınızda, bu kez form içindeki verileri dosya post yöntemi ile kendi kendine gönderir.

Form verilerinin gönderilmesinde $_GET değişkenini kullanma

Form verilerini göndermek için POST yöntemini kullandığınızda, forma işlem yapacak dosyaya gönderilecek değişken değerleri HTTP POST yöntemi ile $_POST değişken dizisine aktarılır. GET yöntemini kullandığınızda ise, URL parameterleri ile $_GET değişken dizisine aktarılır.

POST yöntemini kullandığınızda, tüm veriler dosyanın içinde gönderildiğinden, kullanıcılar verileri göremezler ve veri boyutu ile ilgili herhangi bir sınırlama yoktur.

GET yöntemini kullandığınızda, gönderilen değişken adları ve değerleri adres satırında URL'nin bir parçası olarak görünür. Ayrıca, bu yöntemde göderilebilecek karakter sayısı sınırlıdır. Kullanıcılar tarafından görülmesini istemediğiniz veya büyük boyutlu verileri aktarırken GET yöntemini kullanmamanız önerilir.

form.php


<html>
<body>

<form method="get" action="formislem.php">
  Adı: <input type="text" id="adi" name="adi">
  <input type="submit" value="Gönder">
</form>

</body>
</html>

method : Formdaki verilerin kullanma yöntemi (Burada get kullanılıyor.)

Yukarıdaki dosyayı tarayıcımızda çalıştırdığımızda karşımıza aşağıdaki görüntü gelir:

Adı:

Veri giriş alanına "Ahmet" yazıp butona tıkladığınızda, form içindeki veriler get yöntemi ile formislem.php dosyası otomatik olarak açılır ve bilgiler dosyaya gönderilir.

formislem.php (Aktarılan dosya)


<html>
<body>

<?php
   echo 'Adı: ' . htmlspecialchars($_GET['adi']);
?>

</body>
</html>

Yukarıdaki form.php dosyasında veri giriş alanına "Ahmet" değerini girip submit butonuna bastığınızda, formislem.php dosyası çağrılır ve web tarayıcınızda aşağıdaki ifadeler karşınıza çıkar:

Adı: Ahmet

GET yöntemi kullanıldığında, formislem dosyası otomatik olarak çağrıldığında, tarayıcının adres satırında aşağıdaki ifadeler görülecektir:

/formislem.php?adi=Ahmet

Dosya içindeki $_GET['adi'] değişken değeri PHP tarafından otomatik olarak atanır. Aynı değişken değerine $_REQUEST['adi'] yoluyla da erişmek mümkündür.

Form veri giriş alanları

Form veri giriş alanları temel olarak 2 ana gruba ayrılabilir:

1. <input> etiketinin type özelliği ile elde edilen veri giriş yöntemleri

2. Diğer form etiketleri ile elde edilen veri giriş yöntemleri

<input> etiketi ile kullanılan bazı type değerleri ile diğer form etiketlerinin bazıları HTML5 ile birlikte eklenmiş olup, <input> etiketi ile kullanılan bazı type değerleri de bazı modern web tarayıcıları tarafından desteklenmemektedir.

Form etiketleri
<input> Diğer
button Tıklanabilir bir buton oluşturur. <button> Tıklanabilir bir buton oluşturur.
checkbox Bir checkbox oluşturur. <datalist> <input> elemanları için önceden tanımlanmış seçenekler oluşturur.
color Bir renk seçici oluşturur. <fieldset> Bir formdaki ilişkili elemanları gruplandırır.
date Bir tarih kontrolü oluşturur. <keygen> Formlar için parola oluşturma alanı oluşturur.
datetime Bir tarih ve zaman kontrolü oluşturur. <label> <input> elemanı için bir etiket oluşturur.
datetime-local Lokal bir tarih ve zaman kontrolü oluşturur. <legend> <fieldset> elemanı için bir başlık oluşturur.
email Bir e-posta alanı oluşturur. <optgroup> Bir açılır listedeki ilişkili seçenekleri bir grup altında toplar.
file Dosya yükleme için bir dosya seçme alanı ve arama butonu oluşturur. <option> Bir açılır listede seçenek oluşturur.
hidden Gizli bir veri giriş alanı oluşturur. <output> Bir hesaplamanın sonucunu oluşturur.
image Submit butonu olarak bir resim oluşturur. <select> Bir açılır liste oluşturur.
month Bir ay ve yıl kontrolü oluşturur. <textarea> Çok satırlı bir veri giriş kontrolü oluşturur.
number Sayı girişi için bir alan oluşturur.    
password Bir parola alanı oluşturur.    
radio Bir radio butonu oluşturur.    
range Tam değeri önemli olmayan bir sayı girişi için bir alan oluşturur.    
reset Tüm form değerlerine ön tanımlı değerleri atayan bir buton oluşturur.    
search Bir arama karakter dizisi girmek için bir metin alanı oluşturur.    
submit Bir submit butonu oluşturur.    
tel Bir telefon numarası giriş alanı oluşturur.    
text Ön tanımlı genişliği 20 karakter olan tek satırlık metin giriş alanı oluşturur.    
time Zaman girişi için bir kontrol oluşturur.    
url URL girişi için bir alan oluşturur.    
week Bir hafta ve yıl kontrolü oluşturur.    

PHP'de, bir PHP sayfasına $_GET veya $_POST değişken dizileri yoluyla gönderilen form değerlerine, PHP sayfası içinde yine $_GET veya $_POST değişken dizileri yoluyla erişim sağlanarak işlem yapılabilir.

<input> elemanı kullanımı

<input> elemanı, type özelliğinin aldığı değere bağlı olarak farklı türde veri girişi için kullanılmaktadır. type özelliği button, checkbox, file, password, radio, submit, text gibi değerler alabilmektedir.

Aşağıdaki form.php adlı dosyada, bir form içinde text, button, hidden, checkbox, file, radio ve submit type özellikleri içeren <input> elemanları bulunmaktadır.

form.php


<html>
<body>

<form method="post" action="formislem.php" enctype="multipart/form-data">
  Adı: <input type="text" id="adi" name="adi"> <input type="button" id="badi" name="badi" value="İsim ver" onclick="document.getElementById('adi').value='Ahmet'"><br/>
  <input type="hidden" id="hdeger" name="hdeger" value="gizlideger">
  <input type="checkbox" id="medenihal" name="medenihal" value="Evli"> Evli<br/>
  Bir dosya seçiniz: <input type="file" id="fdosya" name="fdosya"><br/>
  <input type="radio" name="meslek" value="Öğretmen"> Öğretmen<br/>
  <input type="radio" name="meslek" value="Avukat"> Avukat<br/>
  <input type="radio" name="meslek" value="Esnaf"> Esnaf<br/><br/>
  <input type="submit" value="Gönder">
</form>

</body>
</html>

Yukarıdaki dosyayı çalıştırdığımızda, web tarayıcımızda aşağıdaki ifadeler karşımıza çıkar:

Adı:
Evli
Bir dosya seçiniz:
Öğretmen
Avukat
Esnaf

Karşınıza gelen ekranda, "İsim ver" butonuna tıkladığınızda, ilk veri giriş alanına "Ahmet" değerini atar (Javascript ile). Evli ifadesinin sol tarafındaki kutuyu seçtikten, Gözat butonuna basıp bir dosya seçtikten ve Öğretmen ifadesini seçtikten sonra "Gönder" butonuna tıklarsanız, <input> elemanının farklı type değerleri ile elde edilen veriler post yöntemi ile formislem.php dosyasına gönderilecektir. hdeger adlı veri giriş alanında bulunan "gizlideger" değeri de, kullanıcı tarafından görülmediği halde aktarılır.

formislem.php (Aktarılan dosya)


<html>
<body>

<?php
   echo 'Adı: ' . htmlspecialchars($_POST['adi']) . '<br/>';
   echo 'Gizli değer: ' . htmlspecialchars($_POST['hdeger']) . '<br/>';
   echo 'Medeni hali: ' . htmlspecialchars($_POST['medenihal']) . '<br/>';
   echo 'Meslek: ' . htmlspecialchars($_POST['meslek']) . '<br/>';
   echo 'Dosya adı: ' . htmlspecialchars($_FILES['fdosya']['name']) . '<br/>';
   echo 'Dosya türü: ' . htmlspecialchars($_FILES['fdosya']['type']) . '<br/>';
   echo 'Dosya boyutu: ' . htmlspecialchars($_FILES['fdosya']['size']) . '<br/>';
   echo 'Dosya geçici adı: ' . htmlspecialchars($_FILES['fdosya']['tmp_name']);
?>

</body>
</html>

Adı: Ahmet
Gizli değer: gizlideger
Medeni hali: Evli
Meslek: Öğretmen
Dosya adı: deneme.txt
Dosya türü: text/plain
Dosya boyutu: 40
Dosya geçici adı: C:\wamp\tmp\phpBB50.tmp

$_FILES değişkeni, web tarayıcısında açılan aktif PHP sayfasına HTTP POST metodu yoluyla upload edilen dosya ile ilgili bilgileri içeren değişkenler dizisidir. Değişken içindeki değerler, dosyanın adını, boyutunu, tipini, geçici olarak verilen dosya adını ve eğer varda meydana gelen hata kodunu içerir.

Diğer form etiketlerinin kullanımı

<button>, <datalist>, <fieldset>, <keygen>, <label>, <legend>, <optgroup>, <option>, <output>, <select>, <textarea> etiketlerini kullanarak form üzerinden veri gönderebilirsiniz.

form.php


<html>
<body>

<form method="post" action="formislem.php" enctype="multipart/form-data">
  <fieldset>
  	<legend>Personel bilgileri</legend>
    <label for="adi">Adı: </label> <input type="text" id="adi" name="adi" list="isimler"> <button type="button" id="badi" name="badi" onclick="document.getElementById('adi').value='Ahmet'">İsim ver</button><br/><br/>
    <datalist id="isimler">
       <option value="Ahmet">
       <option value="Mehmet">
       <option value="Necati">
       <option value="Nedim">
    </datalist>  
    <textarea id="bilgi" name="bilgi" rows="5" cols="30"></textarea><br/><br/>
    <select id="kadi" name="kadi">
      <optgroup label="Öğretmen">
        <option value="Mehmet">Mehmet</option>
        <option value="Sedat">Sedat</option>
        <option value="Vedat">Vedat</option>
      </optgroup>
      <optgroup label="Öğrenci">
        <option value="Ahmet">Ahmet</option>
        <option value="Mert">Mert</option>
        <option value="Murat">Murat</option>
      </optgroup>
    </select>
  </fieldset><br/>  
  
  <button type="submit">Gönder</button>
</form>

</body>
</html>

Yukarıdaki dosyayı çalıştırdığımızda, web tarayıcımızda aşağıdaki ifadeler karşımıza çıkar:

Personel bilgileri




Karşınıza gelen ekranda, "İsim ver" butonuna tıkladığınızda, ilk veri giriş alanına "Ahmet" değerini atar (Javascript ile). Metin giriş alanına "Ahmet bir öğrencidir." ifadesini girer ve en alttaki kutuda "Ahmet" seçeneneğini seçtikten sonra "Gönder" butonuna tıklarsanız, veriler post yöntemi ile formislem.php dosyasına gönderilecektir.

formislem.php (Aktarılan dosya)


<html>
<body>

<?php
   echo 'Adı: ' . htmlspecialchars($_POST['adi']) . '<br/>';
   echo 'Bilgi: ' . htmlspecialchars($_POST['bilgi']) . '<br/>';
   echo 'Seçenek adı: ' . htmlspecialchars($_POST['kadi']);
?>

</body>
</html>

Adı: Ahmet
Bilgi: Ahmet bir öğrencidir.
Seçenek adı: Ahmet